﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace SoulKeeper
{
    /// <summary>
    /// Classe responsavel por realizar as colisoes que irao acontecer
    /// </summary>
    public static class Collision
    {
        /// <summary>
        /// Checa se um sprite está colidindo com algum outro sprite
        /// </summary>
        /// <param name="rec1">Retangulo do primeiro objeto</param>
        /// <param name="rec2">Retangulo do segundo objeto</param>
        /// <returns>Retorna verdadeiro se esta colidindo e falso se não</returns>
        public static bool IsColliding(Rectangle rec1, Rectangle rec2)
        {
            if (rec1.Intersects(rec2))
                return true;
            
            return false;
        }//IsColliding

        /// <summary>
        /// Retorna o tamanho da interseção vertical e horizontal entre os retãngulos dos sprites
        /// </summary>
        /// <param name="rectA">O Primeiro objeto que sera checado</param>
        /// <param name="rectB">O Segundo objeto que sera checado</param>
        /// <returns>Retorna um Vector2 que sera a nova posicao do objeto</returns>
        public static Vector2 GetIntersection(Rectangle rectA, Rectangle rectB)
        {
            float halfWidthA = rectA.Width / 2.0f;
            float halfHeightA = rectA.Height / 2.0f;
            float halfWidthB = rectB.Width / 2.0f;
            float halfHeightB = rectB.Height / 2.0f;

            Vector2 centerA = new Vector2(rectA.Left + halfWidthA, rectA.Top + halfHeightA);
            Vector2 centerB = new Vector2(rectB.Left + halfWidthB, rectB.Top + halfHeightB);

            float distanceX = centerA.X - centerB.X;
            float distanceY = centerA.Y - centerB.Y;
            float minDistanceX = halfWidthA + halfWidthB;
            float minDistanceY = halfHeightA + halfHeightB;

            if (Math.Abs(distanceX) >= minDistanceX || Math.Abs(distanceY) >= minDistanceY)
                return Vector2.Zero;

            float depthX = distanceX > 0 ? minDistanceX - distanceX : (minDistanceX * -1) - distanceX;
            float depthY = distanceY > 0 ? minDistanceY - distanceY : (minDistanceY * -1) - distanceY;
            return new Vector2(depthX, depthY);
        }//GetIntersection
    }
}
